import axios from "axios"

const getResponse = (res, config) => {
    const { statusCode, errMsg } = res;
    const response = {
        ...res,
        status: statusCode,
        statusText: errMsg,
        config,
        request: null,
    };

    return response;
};

const uniAdapter = (config) => {
    if (!uni) {
        throw new Error("please use this in uni-app project!");
    }
    return new Promise((resolve, reject) => {
        const { baseURL, url, headers, data, params } = config;
        const uniConfig = {
            ...config,
            url: (baseURL || '') + url,
            header: headers,
        };

        if (data || params) {
            try {
                uniConfig.data = JSON.parse(data || params);
            } catch (e) {
                uniConfig.data = data || params;
            }
        }
        uni.request({
            ...uniConfig,
            success(res) {
                const response = getResponse(res, config);
                if (response.status > 399) {
                    uni.showToast({ title: '请求出错', icon: 'error' })
                }
                resolve(response);
            },
            fail(res) {
                const response = getResponse(res, config);
                reject(response);
            },
        });
    });
};

axios.defaults.adapter = uniAdapter;

export default axios;